﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Resources;
using System.Data.Linq;
using CDStore3Tiers;

namespace CuaHangDiaNhac
{
	public partial class frmSuKien : DevComponents.DotNetBar.Metro.MetroForm
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Sự kiện");
		XLSuKien XLSK;
		StoreCDDataContext db;
		XuLyForm XL = new XuLyForm();
		List<SuKien> list;

		DataGridViewTextBoxColumn coMaSK;
		DataGridViewTextBoxColumn coTenSK;
		DataGridViewTextBoxColumn coNoiDung;
		DataGridViewTextBoxColumn coGiamGia;
		DataGridViewTextBoxColumn coNgayBD;
		DataGridViewTextBoxColumn coNgayKT;

		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 401))
			{
				btnThemSK.Enabled = true;
				ExAdd.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 402))
			{
				ExRemove.Visible = true;
				tsDelete.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 403))
			{
				tsSave.Enabled = true;
				ExSave.Visible = true;
			}
		}

		public void closeall()
		{
			btnThemSK.Enabled = false;
			ExAdd.Visible = false;
			ExRemove.Visible = false;
			tsDelete.Enabled = false;
			tsSave.Enabled = false;
			ExSave.Visible = false;
		}

		public frmSuKien()
		{
			InitializeComponent();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
		}

		private void frmSuKien_Activated(object sender, EventArgs e)
		{
			//  db = new StoreCDDataContext();

			loadDGV();

		}


		public void loadDGV()
		{

			XLSK = new XLSuKien();
			dgv.DataSource = null;

			coMaSK = new DataGridViewTextBoxColumn();
			coMaSK.DataPropertyName = "MaSK";
			coMaSK.HeaderText = "Mã sự kiện";
			coMaSK.Name = "cnameMaSK";
			// coID.Visible = false;
			dgv.Columns.Add(coMaSK);


			coTenSK = new DataGridViewTextBoxColumn();
			coTenSK.DataPropertyName = "TenSK";
			coTenSK.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coTenSK.HeaderText = "Tên sự kiện";
			coTenSK.Name = "cnameTenSK";
			dgv.Columns.Add(coTenSK);

			coNoiDung = new DataGridViewTextBoxColumn();
			coNoiDung.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coNoiDung.DataPropertyName = "NoiDung";
			coNoiDung.HeaderText = "Nội dung";
			coNoiDung.Name = "cnameND";
			dgv.Columns.Add(coNoiDung);


			coGiamGia = new DataGridViewTextBoxColumn();
			coGiamGia.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coGiamGia.DataPropertyName = "GiamGia";
			coGiamGia.HeaderText = "Giảm giá";
			coGiamGia.Name = "cnameGG";
			dgv.Columns.Add(coGiamGia);


			coNgayBD = new DataGridViewTextBoxColumn();
			coNgayBD.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coNgayBD.DataPropertyName = "NgayBD";
			coNgayBD.HeaderText = "Ngày bắt đầu";
			coNgayBD.Name = "cnameNgayBD";
			dgv.Columns.Add(coNgayBD);

			coNgayKT = new DataGridViewTextBoxColumn();
			coNgayKT.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coNgayKT.DataPropertyName = "NgayKT";
			coNgayKT.HeaderText = "Ngày kết thúc";
			coNgayKT.Name = "cnameNgayKT";
			dgv.Columns.Add(coNgayKT);

			LoadDS();

		}

		public void LoadDS()
		{
			cbxLocDL.SelectedIndex = 0;
			//   db = new StoreCDDataContext();
			XLSK = new XLSuKien();
			var sukien = db.SuKien_SelectAll();
			BindingSource bs = new BindingSource();
			bs.DataSource = sukien;
			bindingNavigator1.BindingSource = bs;
			dgv.DataSource = bs;
		}

		private void btnThemSK_Click(object sender, EventArgs e)
		{

			//    db = new StoreCDDataContext();
			SuKien sk = new SuKien();
			try
			{

				sk.TenSK = txtTenSK.Text.ToString();
				sk.NoiDung = rtbNoiDung.Text.ToString();
				sk.GiamGia = Convert.ToInt32(intGiamGia.Text.ToString());
				sk.NgayBD = Convert.ToDateTime(dtBD.Value);
				sk.NgayKT = Convert.ToDateTime(dtKetThuc.Value);
				db.SuKiens.InsertOnSubmit(sk);
				log.Info(frmLogin.id + ": đã thêm sự kiện " + sk.TenSK);
				db.SubmitChanges();
			}
			catch (Exception Ex)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Xảy ra lỗi trong quá trình thêm sự kiện!", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": thêm sự kiện mới thất bại");
			}


			loadDGV();
		}

		private void tsDelete_Click(object sender, EventArgs e)
		{
			//   db = new StoreCDDataContext();
			SuKien pq = new SuKien();
			if (dgv.SelectedRows.Count > 0)
			{
				foreach (DataGridViewRow r in dgv.SelectedRows)
				{
					int MaSK = Convert.ToInt32(r.Cells["cnameMaSK"].Value.ToString());
					string TenSk = r.Cells["cnameTenSK"].Value.ToString();
					DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc muốn xoá sự kiện -- " + TenSk.ToString() + " --", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
					if (accept == DialogResult.Yes)
					{
						var xoatk = db.SuKien_Delete(MaSK);
						log.Info(frmLogin.id + ": đã xóa sự kiện " + TenSk);
						db.SubmitChanges();
						loadDGV();
					}

				}
			}
		}

		private void tsRefesh_Click(object sender, EventArgs e)
		{
			loadDGV();
			log.Info(frmLogin.id + ": đã làm mới danh sách sự kiện");
		}

		private void tsSave_Click(object sender, EventArgs e)
		{
			try
			{
				XLSK.updateSuKien(dgv);
				log.Info(frmLogin.id + ": đã cập nhật các thay đổi sự kiện");
			}
			catch (Exception Ex)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": cập nhật các thay đổi sự kiện thất bại");

			}
		}

		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			XLSK = new XLSuKien();
			XL.loadDGV(bindingNavigator1, dgv, XLSK.searchByID(list, tsTimkiem.Text));
		}

		private void tsTimkiem_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Tìm kiếm theo mã, tên, nội dung sự kiện...";
				XL.loadDGV(bindingNavigator1, dgv, list);
			}
		}

		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}

		public void loadDGVByCombobox()
		{
			XLSK = new XLSuKien();
			{
				list = XLSK.getBySoluong(cbxLocDL.SelectedIndex);
				XL.loadDGV(bindingNavigator1, dgv, list);
			}
		}

		private void cbxLocDL_SelectedIndexChanged(object sender, EventArgs e)
		{
			loadDGVByCombobox();
		}

		private void lockContextmenu(bool p)
		{
			ExAdd.Enabled = p;
			exF5.Enabled = p;
			ExRemove.Enabled = p;
			ExSave.Enabled = p;
		}

		private void ExSave_Click(object sender, EventArgs e)
		{
			tsSave.PerformClick();
		}

		public void ExAdd_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
			exThemTK.Expanded = true;
		}

		private void ExRemove_Click(object sender, EventArgs e)
		{
			tsDelete.PerformClick();
		}

		private void exF5_Click(object sender, EventArgs e)
		{
			tsRefesh.PerformClick();
		}

		private void dgv_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;//đối tượng cho biết thông tin hit trên datagridview
			if (e.Button == MouseButtons.Right)
			{ //bắt sự kiện chuột phải
				hit = dgv.HitTest(e.X, e.Y);//tạo đối tượng HTi
				if (hit.Type == DataGridViewHitTestType.Cell)
				{//Kiểm tra xem đối tượng HTi có đúng là kiểu Cell không
					if (!((DataGridViewRow)(dgv.Rows[hit.RowIndex])).Selected)
					{//kiểm tra xem row tại vị trí chuột có đúng là chưa chọn
						dgv.ClearSelection();//xóa chọn tất cả trên datagrid
						((DataGridViewRow)dgv.Rows[hit.RowIndex]).Selected = true;//xác lập chọn cho row tại vị trí nhấn chuột
					}
				}
			}
			if (dgv.SelectedRows.Count > 1)
				lockContextmenu(false);
			else
				lockContextmenu(true);
		}

		private void dtKetThuc_TextChanged(object sender, EventArgs e)
		{
			if (dtKetThuc.Value < dtBD.Value)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show("Thời gian kết thúc không được nhỏ hơn thời gian bắt đầu sự kiện!", "Nhập lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				dtKetThuc.ResetValue();
			}
		}

		private void frmSuKien_Load(object sender, EventArgs e)
		{
			closeall();
            bindingNavigator1.BackColor = Color.FromArgb(0, 192, 0);
			lockLogin();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			log.Info(frmLogin.id + ": đã load lên form sự kiện");
		}



	}
}
